home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 010 / ships.arc / SHIPS.BAS (.txt) < prev   
Encoding:
GW-BASIC  |  1986-10-20  |  17.1 KB  |  644 lines

  1. 10  '  HIDE and SINK Copyright (c) 1983 Mirror Images Software, Inc.
  2. 12  '  Authors - Melissa Treatman / Phil Koopman
  3. 14  '  Date of last revision - June 7, 1983, by Jake Richter
  4. 16  '
  5. 18  CLEAR
  6. 20  DIM PT%(40),SU%(60),DES%(60),CRS%(60),BTL%(80),SS%(50),FLM%(30),MR%(20)
  7. 22  DIM MS%(20),HIT%(20),MSL%(20),CA%(20),CB%(20),CC%(20),CD%(20),CE%(20),CF%(20)
  8. 24  DIM CG%(20),CH%(20),CI%(20),CJ%(20),CP%(20),CS%(20),N1%(20),N2%(20),N3%(20)
  9. 26  DIM MIS%(10),N4%(20),N5%(20),N6%(20),N7%(20),N8%(20),N9%(20),N10%(20),RB%(20)
  10. 28  DIM N(14,1),B%(11,11),F%(1,11,11),S%(1,4,5,2)
  11. 30  DIM H(17),N$(4),G(3),F(1,11),M(4)
  12. 32  '
  13. 34  '  initialize for color monitor
  14. 35  KEY OFF:DEF SEG=&HB800:POKE &H3FFF,254:IF PEEK(&H3FFF)=254 THEN 37
  15. 36  CLS:PRINT "THIS PROGRAM REQUIRES THE COLOR GRAPHICS ADAPTER TO BE PLAYED.":PRINT "NO ADAPTER PRESENT. EXECUTION STOPPED.":KEY ON:STOP
  16. 37  DEF SEG=0:IF (PEEK(&H410) AND &H30)<>&H30 THEN GOTO 40 ELSE CLS:PRINT:PRINT:PRINT "TURN ON YOUR COLOR MONITOR. PRESS X TO STOP, ANY OTHER KEY TO BEGIN."
  17. 38  A$=INKEY$:IF A$="" THEN 38
  18. 39  IF A$="X" OR A$="x" THEN CLS:KEY ON:STOP ELSE WIDTH 80:POKE &H410,((PEEK(&H410) AND &HCF) OR &H20)
  19. 40  WIDTH 40 :SCREEN 1 :SCREEN 0
  20. 42  LOCATE ,,1,6,7 :SCREEN 1
  21. 44  KEY OFF:FOR X=1 TO 10:KEY X,"":NEXT
  22. 46  DEF SEG=&H40:POKE &H17,(PEEK(&H17)AND &HFFBF)+64
  23. 48  GOSUB 1206
  24. 50  H9 =  - 1:H(0) = 0
  25. 52  H9 =  - 1:H(0) = 0
  26. 54  BP=1
  27. 56  M(0) = 9
  28. 58  M(1) = 203
  29. 60  M(2) = 7
  30. 62  M(3) = 201
  31. 64  G(0) = 6:G(1) = 6
  32. 66  G(2) = 5:G(3) = 5
  33. 68   FOR A = 0 TO 11
  34. 70   FOR B = 0 TO 11
  35. 72  B%(A,B) = 16
  36. 74  F%(0,A,B) = 1
  37. 76  F%(1,A,B) = 1
  38. 78   NEXT B: NEXT A
  39. 80   FOR A = 0 TO 1
  40. 82   RESTORE
  41. 84   FOR B = 0 TO 4
  42. 86   READ N$(B),S%(A,B,0,0),S%(A,B,0,1)
  43. 88  S%(A,B,0,2) = S%(A,B,0,0)
  44. 90   FOR C = 1 TO S%(A,B,0,0)
  45. 92   READ S%(A,B,C,0),S%(A,B,C,2)
  46. 94   NEXT C: NEXT B: NEXT A
  47. 96   DATA PT BOAT,2,2
  48. 98   DATA  2,2301,2,3001
  49. 100   DATA   SUBMARINE ,3,3
  50. 102   DATA   2,7801,2,8501,2,9201
  51. 104   DATA   DESTROYER ,3,1
  52. 106   DATA    1,2316,2,3016,1,3716
  53. 108   DATA   CRUISER ,4,2
  54. 110   DATA    2,7416,1,8116,1,8816,2,9516
  55. 112   DATA   BATTLESHIP ,5,3
  56. 114   DATA   2,2330,1,3030,2,3730,1,4430,2,5130
  57. 116  GOSUB 626
  58. 118  R9=RS
  59. 120  GOSUB 1214
  60. 122  DEF SEG=&H40
  61. 124  CLS
  62. 126   IF G9 = 3 THEN LOCATE 1,16 :PRINT"SUPER-SALVO";
  63. 128   IF G9 = 2 THEN LOCATE 1,19 :PRINT"SUPER";
  64. 130  COLOR 0
  65. 132  MIS%(0)=16:MIS%(1)=7:MIS%(2)=&HF00F:MIS%(3)=&HC30:MIS%(4)=&HC3CF:MIS%(5)=&H3CC:MIS%(6)=&HC3CF:MIS%(7)=&HC30:MIS%(8)=&HF00F
  66. 134   GOSUB 488:GOSUB 498:MIS$="C1983 MIRROR IMAGES":FOR ZN=1 TO 19:LOCATE ZN,40:PRINT MID$(MIS$,ZN,1);:NEXT:PUT(312,0),MIS%,PSET
  67. 136  FOR ZN%=1 TO 100:NEXT ZN%
  68. 138   LOCATE 23,11:PLAY "MB":GOSUB 920:PLAY "MF"
  69. 140   PRINT "I AM HIDING MY SHIPS."
  70. 142  T = 1:T2 = 0
  71. 144  RANDOMIZE (VAL(RIGHT$(TIME$,2)))
  72. 146  FOR ZN%=1 TO 100:NEXT ZN%
  73. 148   FOR A = 0 TO 4
  74. 150  X =  INT ( RND (1) * 10) + 1
  75. 152  Y =  INT ( RND (1) * 10) + 1
  76. 154  C =  INT ( RND (1) * 4)
  77. 156   IF C = 0 THEN DX = 1:DY = 0
  78. 158   IF C = 1 THEN DX =  - 1:DY = 0
  79. 160   IF C = 2 THEN DX = 0:DY = 1
  80. 162   IF C = 3 THEN DX = 0:DY =  - 1
  81. 164   FOR B = 1 TO S%(1,A,0,0)
  82. 166  P = X * 100 + Y
  83. 168   IF X > 10 OR X < 1 OR Y > 10 OR Y < 1 GOTO 150
  84. 170   FOR C = 0 TO A: FOR D = 0 TO S%(1,C,0,0)
  85. 172   IF S%(1,C,D,1) = P GOTO 150
  86. 174   NEXT D: NEXT C
  87. 176  S%(1,A,B,1) = P
  88. 178  X = X + DX:Y = Y + DY
  89. 180   NEXT B
  90. 182   NEXT A
  91. 184   FOR E=0 TO 4:LINE (0,176)-(319,199),0,BF
  92. 186   LOCATE 22,11:PRINT "HIDE YOUR ";N$(E);".";
  93. 188   PRINT "  TO POSITION ONE END OF THIS SHIP,";
  94. 190  F = 0: GOSUB 742
  95. 192   GOSUB 734:X = A:Y = B
  96. 194   IF F%(0,A,B) <  > 31 GOTO 228
  97. 196   LINE(0,168)-(319,199),0,BF:LOCATE 22,1
  98. 198   PRINT "DO YOU WANT THIS SHIP TO EXTEND DOWN OR";
  99. 200   PRINT "TO THE RIGHT FROM THE MARKED POSITION?";
  100. 202  IF BP<>0 THEN SOUND 500,2
  101. 204   LOCATE  24,13 :PRINT "ENTER D OR R ";
  102. 206   A$=INKEY$
  103. 208   IF  A$ ="D" THEN PRINT A$;: DX = 0:DY = 1: GOTO 214
  104. 210   IF  A$ ="R" THEN PRINT A$;: DX = 1:DY = 0: GOTO 214
  105. 212   GOTO 206
  106. 214   LINE(0,168)-(319,199),0,BF
  107. 216   IF X + DX * S%(0,E,0,0) > 11 GOTO 222
  108. 218   IF Y + DY * S%(0,E,0,0) > 11 GOTO 222
  109. 220   GOTO 252
  110. 222  A = 0:B = 0: GOSUB 716:LINE(A,B)-(A+6,B+6),0,BF
  111. 224   GOSUB 734:F%(0,A,B) = 1
  112. 226   LINE(0,168)-(319,199),0,BF
  113. 228   LINE(0,168)-(319,199),0,BF:LOCATE 22,13: PRINT "ILLEGAL PLACEMENT!!";
  114. 230  IF BP<>0 THEN BEEP
  115. 232   FOR D = 1 TO 500: NEXT D
  116. 234   LINE(0,168)-(319,199),0,BF
  117. 236   GOTO 186
  118. 238   FOR D = D - 1 TO 1 STEP  - 1
  119. 240  P = S%(0,E,D,1)
  120. 242  B = 0:A = 0: GOSUB 716
  121. 244   LINE(A,B)-(A+6,B+6),0,BF
  122. 246   GOSUB 734:F%(0,A,B) = 1
  123. 248   NEXT D
  124. 250   GOTO 228
  125. 252   FOR D = 1 TO S%(0,E,0,2)
  126. 254  P = X * 100 + Y
  127. 256  A = 0:B = 0: GOSUB 716
  128. 258   IF F%(0,X,Y) <  > 1 AND F%(0,X,Y) <  > 31 GOTO 238
  129. 260  P$ =  LEFT$ (N$(E),1): GOSUB 706
  130. 262  F%(0,X,Y) = 2
  131. 264  S%(0,E,D,1) = P
  132. 266  X = X + DX:Y = Y + DY
  133. 268   NEXT D
  134. 270   NEXT E
  135. 272   LINE(120,20)-(194,165),0,BF:LINE(195,24)-(199,100),0,BF
  136. 274   LINE(140,20)-(178,42),1,B:LINE(141,21)-(177,41),3,B:LINE(142,22)-(176,40),2,B:IF BP<>0 THEN BEEP
  137. 276  Y4 = 30:LIN=5:LP2=0
  138. 278  F = 1:A = 130:B = Y4:Y4 = Y4 + 8
  139. 280   IF T = 1 THEN GOSUB 1196:LOCATE 4,19 : PRINT "YOUR";:LOCATE 5,19 :PRINT"TURN";:GOSUB 870
  140. 282   IF T = 0 THEN LOCATE 4,20 :PRINT"MY";: LOCATE 5,19 :PRINT"TURN";:LINE(0,168)-(319,199),0,BF
  141. 284   FOR E = 1 TO 11:F(T2,E) = 0: NEXT E
  142. 286  E = 1
  143. 288   IF G9 > 1 AND G(T2) < 1 GOTO 376
  144. 290   IF G9 > 2 THEN  FOR E = 1 TO G(T2)
  145. 292   IF T = 0 GOTO 308
  146. 294   GOSUB 926
  147. 296   GOSUB 1022
  148. 298   IF F = 1 THEN  GOTO 340
  149. 300   LOCATE 22,13:PRINT "INVALID MOVE!!!";
  150. 302  IF BP<>0 THEN BEEP
  151. 304  FOR W=1 TO 500:NEXT W: GOTO 294
  152. 306  IF BP<>0 THEN  SOUND 250,2
  153. 308  N9 = N9 + 1
  154. 310   IF N9 > N8 GOTO 320
  155. 312  P = N(N9,0)
  156. 314   GOSUB 1022
  157. 316   IF F = 0 GOTO 308
  158. 318   GOTO 340
  159. 320  N7 = N7 + 1
  160. 322   IF N7 > N6 GOTO 332
  161. 324  P = N(N7,1)
  162. 326   GOSUB 1022
  163. 328   IF F = 0 GOTO 320
  164. 330   GOTO 340
  165. 332   GOSUB 804
  166. 334   GOSUB 1022
  167. 336   IF F = 0 GOTO 332
  168. 338  IF LP2=1 THEN GOTO 414
  169. 340  IF LP2=1 THEN GOTO 414
  170. 342  IF LIN<6 THEN LIN=7:LOCATE  LIN,16 :PRINT"SHOTS MADE";:LIN=LIN+1
  171. 344  IF T=0 THEN GOSUB 734: B%(A,B) = 2
  172. 346  F(T2,E) = P
  173. 348   IF F(T2,E) = 0 GOTO 364
  174. 350   IF (E > G(T2) AND G9 > 1) OR (E > 1 AND G9 = 2) THEN PUT(133,LIN*8-4),MSL%:IF T=0 AND G8=0 THEN GOSUB 916
  175. 352  P$ =  CHR$ ( INT (F(T2,E) / 100) + 64)
  176. 354  K$ =  RIGHT$ ( STR$ (F(T2,E)),2)
  177. 356   IF  LEFT$ (K$,1) = "0" THEN K$ = RIGHT$ (K$,1)+" "
  178. 358  P$ = K$ + P$:W = 20:B =LIN:LIN=LIN + 1
  179. 360  LOCATE B,W :PRINT P$;:FOR W=1 TO 1000:NEXT W
  180. 362  IF T=0 THEN GOSUB 1186
  181. 364   IF T = 0 AND F(T2,E) > 0 THEN IF BP<>0 THEN BEEP
  182. 366   IF G9 = 1 GOTO 444
  183. 368   IF G9 = 2 THEN E = E + 1
  184. 370   IF G9 > 2 THEN  NEXT E:LP2=1
  185. 372   IF E > 2 AND G9 < 3 GOTO 444
  186. 374   IF E > G(T2) + G(T2 + 2) GOTO 444
  187. 376   IF G(T2 + 2) < 1 GOTO 444
  188. 378   IF G9 > 2 THEN LP2=1: FOR E = G(T2) + 1 TO G(T2) + G(T2 + 2)
  189. 380   IF T = 0 GOTO 388
  190. 382   GOSUB 930
  191. 384   IF F = 0 GOTO 444
  192. 386   GOTO 294
  193. 388  R9 =  RND (R9)
  194. 390   IF R9 > 0.6 THEN P = 0: GOTO 414
  195. 392   IF G(1) < 1 GOTO 402
  196. 394   IF S%(1,0,0,0) < 2 AND S%(1,0,0,1) > 0 THEN A = 0: GOTO 410
  197. 396   IF S%(1,1,0,0) < 3 AND S%(1,1,0,1) > 0 THEN A = 1: GOTO 410
  198. 398  R9 =  RND (R9)
  199. 400   IF R9 > 0.3 THEN P = 0: GOTO 414
  200. 402  R9 =  RND (R9)
  201. 404  A =  INT (R9 * 2)
  202. 406   IF S%(1,0,0,1) = 0 THEN A = 1
  203. 408   IF S%(1,1,0,1) = 0 THEN A = 0
  204. 410   GOSUB 968
  205. 412   GOTO 292
  206. 414  IF LIN<6 THEN LIN=7:LOCATE  LIN,16 :PRINT"SHOTS MADE";:LIN=LIN+1
  207. 416  IF T=0 THEN GOSUB 734: B%(A,B) = 2
  208. 418  F(T2,E) = P
  209. 420   IF F(T2,E) = 0 GOTO 436
  210. 422   IF (E > G(T2) AND G9 > 1) OR (E > 1 AND G9 = 2) THEN PUT(130,LIN*8-5),MSL%
  211. 424  P$ =  CHR$ ( INT (F(T2,E) / 100) + 64)
  212. 426  K$ =  RIGHT$ ( STR$ (F(T2,E)),2)
  213. 428   IF  LEFT$ (K$,1) = "0" THEN K$ = RIGHT$ (K$,1)+" "
  214. 430  P$ = K$ + P$:W = 20:B =LIN:LIN=LIN + 1
  215. 432  LOCATE B,W :PRINT P$;:FOR W=1 TO 100:NEXT W
  216. 434  IF T=0 THEN GOSUB 1186
  217. 436   IF T = 0 AND F(T2,E) > 0 THEN IF BP<>0 THEN BEEP
  218. 438   IF G9 = 1 GOTO 444
  219. 440   IF G9 = 2 THEN E = E + 1
  220. 442   IF G9 > 2 THEN  NEXT E
  221. 444   IF F(T2,1) <  > 0 OR F(T2,2) <  > 0 GOTO 452
  222. 446   LOCATE 8,17 :PRINT"NO SHOTS";
  223. 448   FOR X = 1 TO 500: NEXT X
  224. 450   IF G(T2 + 2) < 1 THEN LOCATE  9,19 :PRINT"LEFT!";:F=1:GOTO 538
  225. 452   FOR X = 1 TO 500: NEXT X
  226. 454   IF T = 1 THEN T = 0:T2 = 1: GOTO 272
  227. 456   LINE(120,20)-(194,165),0,BF:LINE(195,24)-(199,100),0,BF
  228. 458   FOR T = 1 TO 0 STEP  - 1
  229. 460  T2 = 1: IF T = 1 THEN T2 = 0
  230. 462   FOR E = 1 TO 11
  231. 464  P = F(T2,E)
  232. 466   GOSUB 1042
  233. 468   NEXT E: NEXT T
  234. 470   GOSUB 1170
  235. 472   IF F < 3 GOTO 538
  236. 474  T = 1:T2 = 0
  237. 476   GOTO 272
  238. 478   GOSUB 1042
  239. 480   GOSUB 1170
  240. 482   IF F = 1 GOTO 538
  241. 484   IF T = 0 THEN T = 1:T2 = 0: GOTO 272
  242. 486  T = 0:T2 = 1: GOTO 272
  243. 488  LOCATE 2,16 :PRINT"HIDE & SINK";
  244. 490  LOCATE 1,4 :PRINT"YOUR SHIPS";
  245. 492  D = 16
  246. 494   GOSUB 506
  247. 496   RETURN
  248. 498  LOCATE 1,30:PRINT"MY SHIPS";
  249. 500  D = 210
  250. 502   GOSUB 506
  251. 504   RETURN
  252. 506   FOR X = 0 TO 10
  253. 508   LINE(X*10+D,23)-(X*10+D,115),2
  254. 510   LINE(D-2,X*9+25)-(100+D,X*9+25),2
  255. 512   NEXT X
  256. 514   PUT(D+2,16),CA%:PUT(D+12,16),CB%:PUT(D+22,16),CC%:PUT(D+32,16),CD%
  257. 516   PUT(D+42,16),CE%:PUT(D+52,16),CF%:PUT(D+62,16),CG%:PUT(D+72,16),CH%:PUT(D +82,16),CI%:PUT(D+92,16),CJ%
  258. 518   PUT(D-10,26),N1%:PUT(D-10,35),N2%:PUT(D-10,44),N3%
  259. 520   PUT(D-10,53),N4%:PUT(D-10,62),N5%:PUT(D-10,71),N6%
  260. 522   PUT(D-10,80),N7%:PUT(D-10,89),N8%:PUT(D-10,98),N9%
  261. 524   PUT(D-13,107),N10%
  262. 526   PUT(D-1,124),CP%:PUT(D+8,122),PT%
  263. 528   PUT(D-1,138),CD%:PUT(D+8,136),DES%
  264. 530   PUT(D-1,152),CB%:PUT(D+8,150),BTL%
  265. 532   PUT(D+51,124),CS%:PUT(D+60,122),SU%
  266. 534   PUT(D+51,138),CC%:PUT(D+60,136),CRS%
  267. 536   RETURN
  268. 538  LINE(0,168)-(319,199),0,BF
  269. 540  LOCATE 22,1  : PRINT "GAME OVER ";:FOR W=1 TO 3000:NEXT W
  270. 542  LINE(120,20)-(194,165),0,BF:LINE(195,24)-(199,100),0,BF
  271. 544   IF F = 1 GOTO 562
  272. 546   IF F = 2 GOTO 576
  273. 548   PRINT "TIE GAME.";
  274. 550   GOSUB 920
  275. 552  F=0
  276. 554  FOR Z=0 TO 4
  277. 556  IF S%(0,Z,0,0)>0 THEN F=1
  278. 558  NEXT Z
  279. 560  IF F=0 THEN GOTO 608 ELSE GOTO 580
  280. 562   PRINT "YOU WIN!!!";
  281. 564   GOSUB 904
  282. 566  F=0
  283. 568  FOR Z=0 TO 4
  284. 570  IF S%(0,Z,0,0)>0 THEN F=1
  285. 572  NEXT Z
  286. 574  IF F=0 THEN GOTO 608 ELSE GOTO 580
  287. 576   PRINT "I WIN! --  BETTER LUCK NEXT TIME.";
  288. 578   GOSUB 900
  289. 580   FOR W=1 TO 400:NEXT W:PRINT "I WILL SHOW YOU WHERE MY SHIPS WERE.";
  290. 582   FOR C = 0 TO 4
  291. 584   FOR D = 1 TO S%(1,C,0,2)
  292. 586  P = S%(1,C,D,1)
  293. 588   GOSUB 734: IF F%(1,A,B) > 3 GOTO 596
  294. 590  A = 1:B = 0
  295. 592   GOSUB 716
  296. 594  P$ =  LEFT$ (N$(C),1):F = 1:LINE(A,B)-(A+6,B+6),0,BF: GOSUB 706
  297. 596  A = 1:B = 2
  298. 598   IF S%(1,C,0,0) < 1 GOTO 606
  299. 600  P = S%(1,C,D,2)
  300. 602   GOSUB 716:F = 0
  301. 604   IF S%(1,C,D,0) = 0 THEN PUT (A,B),FLM%,PSET
  302. 606   NEXT D: NEXT C:FOR WT%=1 TO 10000:NEXT WT%
  303. 608  SOUND 32767,10
  304. 610   LINE(0,168)-(319,199),0,BF:LOCATE 22,1 :PRINT "PLAY ANOTHER GAME";
  305. 612  DEF SEG=0:POKE 127,0
  306. 614   GOSUB 792
  307. 616   IF F = 1 THEN RUN
  308. 618   CLS
  309. 620  CLS: LOCATE 12,12 : PRINT "PLAY AGAIN SOON!!"
  310. 622  GOSUB 900
  311. 624  END
  312. 626  OPEN "BDATA" FOR INPUT AS #1
  313. 628  FOR Q=0 TO 40:INPUT#1,PT%(Q):NEXT
  314. 630  FOR Q=0 TO 60:INPUT#1,SU%(Q):NEXT
  315. 632  FOR Q=0 TO 60:INPUT#1,DES%(Q):NEXT
  316. 634  FOR Q=0 TO 60:INPUT#1,CRS%(Q):NEXT
  317. 636  FOR Q=0 TO 80:INPUT#1,BTL%(Q):NEXT
  318. 638  FOR Q=0 TO 50:INPUT#1, SS%(Q):NEXT
  319. 640  FOR Q=0 TO 30:INPUT#1,FLM%(Q):NEXT
  320. 642  CLOSE #1
  321. 644  OPEN "bdata2" FOR INPUT AS #1
  322. 646  FOR Q=0 TO 20:INPUT#1,MR%(Q)
  323. 648  INPUT#1,MS%(Q)
  324. 650  INPUT#1,HIT%(Q)
  325. 652  INPUT#1,MSL%(Q)
  326. 654  INPUT#1,CA%(Q)
  327. 656  INPUT#1,CB%(Q)
  328. 658  INPUT#1,CC%(Q)
  329. 660  INPUT#1,CD%(Q)
  330. 662  INPUT#1,CE%(Q)
  331. 664  INPUT#1,CF%(Q)
  332. 666  INPUT#1,CG%(Q)
  333. 668  INPUT#1,CH%(Q)
  334. 670  INPUT#1,CI%(Q)
  335. 672  INPUT#1,CJ%(Q)
  336. 674  INPUT#1,CP%(Q)
  337. 676  INPUT#1,CS%(Q)
  338. 678  INPUT#1,N1%(Q)
  339. 680  INPUT#1,N2%(Q)
  340. 682  INPUT#1,N3%(Q)
  341. 684  INPUT#1,N4%(Q)
  342. 686  INPUT#1,N5%(Q)
  343. 688  INPUT#1,N6%(Q)
  344. 690  INPUT#1,N7%(Q)
  345. 692  INPUT#1,N8%(Q)
  346. 694  INPUT#1,N9%(Q)
  347. 696  INPUT#1,RB%(Q)
  348. 698  INPUT#1,N10%(Q)
  349. 700  NEXT Q
  350. 702  CLOSE #1
  351. 704  RETURN
  352. 706  IF P$ = "B" THEN PUT(A,B),CB%,PSET:RETURN
  353. 708  IF P$ = "C" THEN PUT(A,B),CC%,PSET:RETURN
  354. 710  IF P$ = "D" THEN PUT(A,B),CD%,PSET:RETURN
  355. 712  IF P$ = "P" THEN PUT(A,B),CP%,PSET:RETURN
  356. 714  IF P$ = "S" THEN PUT(A,B),CS%,PSET:RETURN
  357. 716  J = P / 100
  358. 718  M =  INT (J)
  359. 720  J =  INT ((J - M) * 100 + 0.5)
  360. 722   IF B = 2 GOTO 730
  361. 724  A = M * 10 + M(A)
  362. 726  B = J * 9 + 17
  363. 728   RETURN
  364. 730  A = M + M(A + B)
  365. 732  B = J + 121: RETURN
  366. 734  B = P / 100
  367. 736  A =  INT (B)
  368. 738  B =  INT ((B - A) * 100 + 0.5)
  369. 740   RETURN
  370. 742    LOCATE 24,1:A1$="":A2$="":A3$=""  :IF BP<>0 THEN SOUND 300,2
  371. 744   PRINT"  ENTER A NUMBER/LETTER POSITION...";
  372. 746  A1$=INKEY$
  373. 748  IF A1$="" THEN GOTO 746
  374. 750  IF ASC(A1$)>48 AND ASC(A1$)<58 THEN PRINT A1$;:GOTO 752 ELSE GOTO 746
  375. 752  A2$=INKEY$
  376. 754  IF A2$="" THEN GOTO 752
  377. 756  IF A2$="0" THEN PRINT A2$;:GOTO 760
  378. 758  IF ASC(A2$)>64 AND ASC(A2$)<75 THEN PRINT A2$;:A3$=A2$:A2$="":GOTO 766 ELSE GOTO 752
  379. 760  A3$=INKEY$
  380. 762  IF A3$="" THEN GOTO 760
  381. 764  IF ASC(A3$)>64 AND ASC(A3$)<75 THEN PRINT A3$; ELSE GOTO 760
  382. 766  A$=A3$+A1$+A2$
  383. 768  A =  ASC (A$) - 64
  384. 770  B =  VAL ( RIGHT$ (A$, LEN (A$) - 1))
  385. 772  P = A * 100 + B
  386. 774   IF A > 0 AND A < 11 AND B > 0 AND B < 11 GOTO 782
  387. 776   LOCATE  24,1
  388. 778   PRINT "ENTER A NUMBER/LETTER PAIR SUCH AS '8A'";:IF BP<>0 THEN SOUND 500,4
  389. 780   GOTO 742
  390. 782   GOSUB 734
  391. 784   IF F%(F,A,B) > 3 THEN  RETURN
  392. 786   IF F = 0 AND F%(F,A,B) <  > 1 THEN  RETURN
  393. 788  F%(F,A,B) = 31:A = F:B = 0: GOSUB 716:F = 0: PUT(A,B),MR%
  394. 790   RETURN
  395. 792  PRINT " (Y/N) ";:IF BP<>0 THEN SOUND 550,2
  396. 794  A$=INKEY$
  397. 796  IF A$="Y" THEN PRINT A$;:F=1:GOTO 802
  398. 798  IF A$="N" THEN PRINT A$;:F=0:GOTO 802
  399. 800  GOTO 794
  400. 802   RETURN
  401. 804  B = 0:P = 0
  402. 806  R9 =  RND (R9)
  403. 808  X =  INT (R9 * 10) + 1
  404. 810  R9 =  RND (R9)
  405. 812  Y =  INT (R9 * 10) + 1
  406. 814   FOR C = 0 TO 99
  407. 816   IF B%(X,Y) <  > 16 GOTO 824
  408. 818  A = B%(X - 1,Y) * B%(X + 1,Y) + B%(X,Y - 1) * B%(X,Y + 1)
  409. 820   IF A < 3 THEN A = 0
  410. 822   IF A > B THEN P = X * 100 + Y:B = A: IF A > 500 THEN  RETURN
  411. 824  X = X + 1: IF X > 10 THEN X = 1:Y = Y + 1: IF Y > 10 THEN Y = 1
  412. 826   NEXT C
  413. 828  IF P=0 THEN END
  414. 830   RETURN
  415. 832   GOSUB 734
  416. 834  P=0
  417. 836  ZN1%=B%(A+1,B):ZN2%=B%(A-1,B):ZN3%=B%(A,B+1):ZN4%=B%(A,B-1)
  418. 838   IF ZN1%=8 THEN IF ZN2%=16 THEN IF (A>1) THEN P=(A-1)*100+B
  419. 840   IF ZN2%=8 THEN IF ZN1%=16 THEN IF (A<10) THEN P=(A+1)*100+B
  420. 842   IF ZN3%=8 THEN IF ZN4%=16 THEN IF (B>1) THEN P=A*100+B-1
  421. 844   IF ZN4%=8 THEN IF ZN3%=16 THEN IF (B<10) THEN P=A*100+B+1
  422. 846   RETURN
  423. 848  R9 =  RND (R9)
  424. 850   GOSUB 734
  425. 852  P=0
  426. 854   IF R9 < 0.5 GOTO 862
  427. 856   IF B%(A + 1,B) = 16 AND A < 10 THEN P = (A + 1) * 100 + B: RETURN
  428. 858   IF B%(A - 1,B) = 16 AND A > 1 THEN P = (A - 1) * 100 + B: RETURN
  429. 860   IF R9 < 0.5 THEN  RETURN
  430. 862   IF B%(A,B - 1) = 16 AND B > 1 THEN P = A * 100 + B - 1: RETURN
  431. 864   IF B%(A,B + 1) = 16 AND B < 10 THEN P = A * 100 + B + 1: RETURN
  432. 866   IF R9 < 0.5 GOTO 856
  433. 868   RETURN
  434. 870  N8 =  - 1:N6 =  - 1
  435. 872   IF H9 < 0 GOTO 896
  436. 874   FOR D = 0 TO H9
  437. 876  P = H(D)
  438. 878   GOSUB 832
  439. 880   IF P > 0 THEN N8 = N8 + 1:N(N8,0) = P: GOTO 894
  440. 882  P = H(D)
  441. 884   GOSUB 848
  442. 886   IF P > 0 THEN N6 = N6 + 1:N(N6,1) = P
  443. 888  P = H(D)
  444. 890   GOSUB 848
  445. 892   IF P > 0 THEN N6 = N6 + 1:N(N6,1) = P
  446. 894   NEXT D
  447. 896  N9 =  - 1:N7 =  - 1
  448. 898   RETURN
  449. 900  IF BP<>0 THEN PLAY"T180L4O3C2EGA.E8.A.P16O4C2DO3BO4C2."
  450. 902  RETURN
  451. 904  IF BP<>0 THEN PLAY"T200L4O3DF8F8F8E-D8F2P8F8.G8G8G8B-G8F2P8L8FGFGB-AGFGFO2DB-L4O3D8.F8F8F8GA8B-2"
  452. 906  RETURN
  453. 908   IF BP=0 THEN RETURN
  454. 909   FOR SC=1 TO 5:SOUND 500,1:SOUND 600,1:FOR W=1 TO 50:NEXT W:NEXT SC
  455. 910  RETURN
  456. 912   IF BP=0 THEN RETURN
  457. 913   FOR FQ=475 TO 170 STEP -25:SOUND FQ,2:NEXT FQ:SOUND 175,18:PLAY"MF"
  458. 914  RETURN
  459. 916   IF BP=0 THEN RETURN
  460. 917   FOR SC=1 TO 4:SOUND 300,10:SOUND 200,10:NEXT SC
  461. 918  RETURN
  462. 920  IF BP=0 THEN RETURN
  463. 921  FOR CT=1 TO 2 :SOUND 400,2:SOUND 32767,5:SOUND 500,2
  464. 922  SOUND 32767,5 :SOUND 400,2:SOUND 32767,5:SOUND 300,2:SOUND 32767,5:NEXT CT
  465. 924  RETURN
  466. 926  F = 1:LINE(0,168)-(319,199),0,BF:GOSUB 742
  467. 928   RETURN
  468. 930  IF BP<>0 THEN BEEP
  469. 932   LINE(0,168)-(319,199),0,BF: LOCATE 22,1
  470. 934   PRINT "WANT TO FIRE A MISSILE";:GOSUB 792
  471. 936   IF F = 0 THEN LINE(0,168)-(319,199),0,BF: RETURN
  472. 938   GOSUB 916
  473. 940  A = 0
  474. 942   IF S%(0,0,0,1) > 0 THEN A = 1
  475. 944   IF S%(0,1,0,1) > 0 THEN A = A + 2
  476. 946   IF A < 3 GOTO 960
  477. 948   LINE(0,168)-(319,199),0,BF: LOCATE  22,1
  478. 950   PRINT"FIRE FROM SUB OR PT BOAT (S/P)? ";:IF BP<>0 THEN BEEP
  479. 952  A$=INKEY$
  480. 954  IF A$="P" THEN A=1:PRINT A$;:GOTO 960
  481. 956  IF A$="S" THEN A=2:PRINT A$;:GOTO 960
  482. 958  GOTO 952
  483. 960  A=A-1
  484. 962   GOSUB 968
  485. 964  F = 1
  486. 966   RETURN
  487. 968   FOR B = 1 TO 5
  488. 970   IF S%(T2,A,B,0) = 2 GOTO 974
  489. 972  NEXT B: STOP :REM ERROR
  490. 974  S%(T2,A,B,0) = 1
  491. 976  S%(T2,A,0,1) = S%(T2,A,0,1) - 1
  492. 978  P = S%(T2,A,B,2)
  493. 980  G(T2 + 2) = G(T2 + 2) - 1
  494. 982  B = 2:A = T2
  495. 984  F = 0
  496. 986   IF T = 0 AND G8 <  > 1 THEN F = 1
  497. 988  IF T=0 AND G8=0 GOTO 1020
  498. 990   GOSUB 716
  499. 992  IF T=0 THEN D=210 ELSE D=16
  500. 994  IF A=D+14 THEN A=A-2:B=B-1
  501. 996  IF A=D+21 THEN A=A+3:B=B-1
  502. 998  IF A=D+69 THEN A=A-1
  503. 1000  IF A=D+76 THEN A=A+1
  504. 1002  IF A=D+83 THEN A=A+3
  505. 1004   FOR C = B+6 TO B+3 STEP -1
  506. 1006   FOR J = 1 TO 400: NEXT J
  507. 1008   LINE (A+1,C)-(A+3,C),2: PSET(A+2,C-1),2
  508. 1010   LINE (A+1,C+1)-(A+3,C+1),1
  509. 1012   IF BP<>0 THEN BEEP
  510. 1014   NEXT C
  511. 1015  IF BP=0 THEN RETURN
  512. 1016  FOR SND=1 TO 8:SOUND 800,1:SOUND 32767,1:NEXT SND
  513. 1018  LINE (A+1,B+2)-(A+3,B+3),0,BF
  514. 1020   RETURN
  515. 1022  F = 0
  516. 1024   GOSUB 734
  517. 1026  C = F%(T,A,B)
  518. 1028   IF C > 3 AND C < 31 THEN  RETURN
  519. 1030   IF E < 2 THEN F = 1: RETURN
  520. 1032  F = 1
  521. 1034   FOR A = 1 TO E - 1
  522. 1036   IF F(T2,A) = P THEN F = 0
  523. 1038   NEXT A
  524. 1040   RETURN
  525. 1042   IF P = 0 THEN  RETURN
  526. 1044  B = 0:A = T: GOSUB 716
  527. 1046  IF BP<>0 THEN BEEP
  528. 1048   GOSUB 1064
  529. 1050   FOR C = 0 TO 4: FOR D = 1 TO 5
  530. 1052   IF S%(T,C,D,1) = P GOTO 1078
  531. 1054   NEXT D: NEXT C
  532. 1056   PUT (A,B),MS%,PSET
  533. 1058   GOSUB 734:F%(T,A,B) = 28
  534. 1060   IF T = 0 THEN  GOSUB 734:B%(A,B) = 1
  535. 1062   RETURN
  536. 1064  PUT(A,B),MR%,PSET
  537. 1066   FOR J = 1 TO 3
  538. 1068  LINE(A,B)-(A+6,B+6),0,BF:FOR W=1 TO 200:NEXT W
  539. 1070  PUT (A,B),MR%:FOR W=1 TO 200:NEXT W
  540. 1072  IF BP<>0 THEN SOUND 660,1
  541. 1074  NEXT J
  542. 1076  RETURN
  543. 1078   GOSUB 908
  544. 1080   IF T = 0 THEN H9 = H9 + 1:H(H9) = P
  545. 1082   PUT (A,B),HIT%,PSET
  546. 1084   IF S%(T,C,D,0) <  > 2 GOTO 1092
  547. 1086  S%(T,C,0,1) = S%(T,C,0,1) - 1
  548. 1088   IF C < 2 THEN G(T + 2) = G(T + 2) - 1
  549. 1090   IF C > 1 THEN G(T) = G(T) - 1
  550. 1092  S%(T,C,0,0) = S%(T,C,0,0) - 1
  551. 1094   IF T = 1 AND G8 <  > 1 GOTO 1112
  552. 1096  LINE(A,B)-(A+6,B+6),0,BF
  553. 1098   P$ =  LEFT$ (N$(C),1):F = 1: GOSUB 706
  554. 1100  PUT(A-2,B),RB%,OR
  555. 1102  P = S%(T,C,D,2):A = T:B = 2
  556. 1104   GOSUB 716
  557. 1106  LINE(A,B-1)-(A+6,B-1),0
  558. 1108   PUT (A,B),FLM%,PSET
  559. 1110  LINE(A-1,B+5)-(A+7,B+7),1,BF
  560. 1112  P = S%(T,C,D,1): GOSUB 734:F%(T,A,B) = 8
  561. 1114  S%(T,C,D,0) = 0
  562. 1116   IF T = 0 THEN B%(A,B) = 8
  563. 1118   IF S%(T,C,0,0) > 0 THEN  RETURN
  564. 1120  A = 120:B = 30:F = 1
  565. 1122   LINE (0,168)-(319,199),0,BF:LOCATE  23,16
  566. 1124   IF T = 1 THEN PRINT "YOU SUNK MY ";
  567. 1126   IF T = 0 THEN PRINT "I SUNK YOUR ";
  568. 1128   LOCATE 24,17 :PRINT N$(C);
  569. 1130  PLAY "MB": GOSUB 912
  570. 1132  FOR CT=1 TO 4:FOR COL=1 TO 2
  571. 1134  LINE(115,171)-(211,174),COL,BF:LINE(115,171)-(118,195),COL,BF:LINE(208,171)-(211,195),COL,BF:LINE(115,192)-(211,195),COL,BF
  572. 1136  SOUND 32767,5:NEXT COL:NEXT CT
  573. 1138   FOR X = S%(T,C,0,2) TO 1 STEP  - 1
  574. 1140  P = S%(T,C,X,1):A = T:B = 0: GOSUB 716:F = 1
  575. 1142  P$ =  LEFT$ (N$(C),1): REM GOSUB 200
  576. 1144   IF T = 1 GOTO 1152
  577. 1146   FOR A = 0 TO H9: IF H(A) = P THEN H(A) = H(H9):H9 = H9 - 1
  578. 1148   NEXT A
  579. 1150   GOSUB 734:B%(A,B) = 1
  580. 1152   NEXT X
  581. 1154  P = S%(T,C,1,2):B = 2:A = T: GOSUB 716:F = 0
  582. 1156  B=B-1
  583. 1158  IF A=85 OR A=279 THEN A=A-2
  584. 1160   LINE(A-7,B)-(A+35,B+10),0,BF
  585. 1162  IF B>145 THEN LINE(A+35,B)-(A+40,B+10),0,BF
  586. 1164   PUT (A,B),SS%,PSET
  587. 1166  LINE(0,168)-(319,199),0,BF
  588. 1168   IF F <  = 3 THEN P = 3378: RETURN
  589. 1170  F = 0
  590. 1172   FOR A = 0 TO 1
  591. 1174   FOR B = 0 TO 4
  592. 1176   IF S%(A,B,0,0) <  > 0 THEN F = F + A + 1: GOTO 1180
  593. 1178   NEXT B
  594. 1180   NEXT A
  595. 1182   IF G9 > 1 AND G(0) + G(1) + G(2) + G(3) = 0 THEN F = 0
  596. 1184   RETURN
  597. 1186  BB=P/100:AA=INT(BB):BB=INT((BB-AA)*100+0.5)
  598. 1188  AA=AA*10+9:BB=BB*9+17
  599. 1190  LINE (AA,BB)-(AA+6,BB+6),0,BF
  600. 1192  PUT(AA,BB),MR%
  601. 1194  RETURN
  602. 1196  IF G(0)=0 AND G(2)=0 THEN F=2:LOCATE 7,17:GOTO 1202
  603. 1198  IF G(1)=0 AND G(3)=0 THEN F=1:LOCATE 7,18:GOTO 1202
  604. 1200  RETURN
  605. 1202  IF G(0)=0 AND G(1)=0 AND G(2)=0 AND G(3)=0 THEN F=0:LOCATE 7,19:PRINT "BOTH";:LOCATE 8,18:PRINT "OUT OF";:LOCATE 9,18:PRINT "SHOTS!";:RETURN 538 ELSE IF F=1 THEN LOCATE 7,18:PRINT "I HAVE"; ELSE LOCATE 7,17:PRINT "YOU HAVE";
  606. 1204  LOCATE 8,17:PRINT"NO SHOTS";:LOCATE 9,19:PRINT"LEFT!";:RETURN 538
  607. 1206  COLOR 1,1:LINE(0,0)-(319,199),1,B:LINE(1,1)-(318,198),3,B:LINE(2,2)-(317,197),2,B
  608. 1208  LOCATE 8,4:PRINT"Mirror Images Software Presents:":LINE(24,64)-(280,64),3
  609. 1210  LOCATE 12,16:PRINT"H I D E":LOCATE 14,19:PRINT"&":LOCATE 16,16:PRINT"S I N K"
  610. 1212  RETURN
  611. 1214  '
  612. 1216  CLS:LINE(0,0)-(319,199),2,B:LINE(1,1)-(318,198),3,B:LINE(2,2)-(317,197),1,B
  613. 1218  LOCATE 24,5:PRINT"(C)1983 Mirror Images Software";
  614. 1220  LOCATE 11,10:PRINT"DO YOU WANT THE SOUND";:LOCATE 13,16:PRINT"TURNED ON";
  615. 1222  LOCATE 15,17:GOSUB 1268:BP=F
  616. 1224  CLS:LINE(0,0)-(319,199),2,B:LINE(1,1)-(318,198),1,B:LINE(2,2)-(317,197),3,B
  617. 1226  LOCATE 24,5:PRINT"(C)1983 Mirror Images Software";
  618. 1228   LOCATE 3,5 : PRINT "PICK THE GAME YOU WANT TO PLAY:";
  619. 1230   LOCATE 6,5 : PRINT "1=STANDARD HIDE & SINK";
  620. 1232   LOCATE 8,5: PRINT "2=SUPER-HIDE & SINK";
  621. 1234   LOCATE 10,5: PRINT "3=SUPER-SALVO HIDE & SINK";
  622. 1236  IF BP<>0 THEN SOUND 500,2
  623. 1238   LOCATE 13,5 : PRINT "WHAT NUMBER GAME DO YOU WANT? ";
  624. 1240   A$= INKEY$
  625. 1242  IF A$="" THEN GOTO 1240
  626. 1244   IF ASC(A$)>48 AND ASC(A$)<52 THEN G9=VAL(A$):GOTO 1248
  627. 1246  GOTO 1240
  628. 1248  B = 8:F = 1
  629. 1250   CLS
  630. 1252  LINE(0,0)-(319,199),1,B:LINE(1,1)-(318,198),2,B:LINE(2,2)-(317,197),3,B
  631. 1254  LOCATE 24,5:PRINT"(C)1983 Mirror Images Software";
  632. 1256   LOCATE 7,6 : PRINT "DO YOU WANT THE 'NIGHTTIME'";
  633. 1258   LOCATE 10,10: PRINT "OPTION TURNED ON?";
  634. 1260   LOCATE 13,3 : PRINT "(THIS MAKES THE GAME MORE DIFFICULT)";
  635. 1262  LOCATE 15,14: GOSUB 1268
  636. 1264  IF F=1 THEN G8=0 ELSE G8=1
  637. 1266  RETURN
  638. 1268  PRINT " (Y/N) ";:IF BP<>0 THEN SOUND 550,2
  639. 1270  A$=INKEY$
  640. 1272  IF A$="Y" THEN PRINT A$;:F=1:GOTO 1278
  641. 1274  IF A$="N" THEN PRINT A$;:F=0:GOTO 1278
  642. 1276  GOTO 1270
  643. 1278   RETURN
  644.